package com.sgb.goods.entity;

import android.text.SpannableStringBuilder;

import com.blankj.utilcode.util.ColorUtils;
import com.blankj.utilcode.util.SpanUtils;
import com.sgb.goods.R;
import com.sgb.goods.utils.SpannableUtils;

import java.io.Serializable;
import java.util.List;

/**
 * 订单列表实体
 *
 * @author cyj
 */
public class OrderListEntity implements Serializable {

    /**
     * 物流状态 未发货：2 待收货:0 已收货:1
     */
    public Integer latestDeliverState;
    /**
     * 支付状态 在线付款审批中:40 在线付款已拒绝:42 在线付款待付款:0 在线付款冻结中:1 在线付款已成功:2 线下付款待付款:0 线下付款确认中:4 线下付款付款成功:2
     */
    public Integer latestPayState;
    /**
     * 是否有审批
     */
    public Integer payApplication;
    /**
     * 订单类型 默认 1：企业下单 0 个人下单 2 团体下单
     */
    public Integer orderType;
    /**
     * 0 在线付款（网银支付） 1 线下付款(银行转账)
     */
    public Integer paymentMethod;
    /**
     * 接单审批状态（0：待审批，1：审批通过 ，2审批不通过 3 无审批 4 当前不在审批状态，但是配置有审批)
     */
    public Integer processState;
    /**
     * 审批类型： 1 下单审批 2接单审批 3支付审批
     */
    public Integer processType;
    /**
     * 跳转企业ID
     */
    public String jumpComId;
    /**
     * 企业名称
     */
    public String supplierName;
    /**
     * 总价
     */
    public String amount;
    /**
     * 所属公司名称
     */
    public String companyName;
    /**
     * 数量
     */
    public Number count;
    /**
     * 付款状态
     */
    public Number payState;
    /**
     * 跳转个人网站No
     */
    public String person;
    /**
     * 跟单人
     */
    public String personName;
    /**
     * 跟单人手机号
     */
    public String personTel;
    /**
     * 单位
     */
    public String unit;
    /**
     * 单价
     */
    public Number money;
    /**
     * sku明细
     */
    public List<SkuDetailsDTO> skuDetails;
    /**
     * 所属公司编号
     */
    public String owned;
    /**
     * 发货状态
     */
    public Number deliveryState;
    /**
     * 供应商
     */
    public String supplier;
    /**
     * 装卸费
     */
    public String handlingCost;
    /**
     * 安装费
     */
    public String installationCost;
    /**
     * 商品名称
     */
    public String name;
    /**
     * 跳转企业No
     */
    public String jumpComNo;
    /**
     * 订单id
     */
    public Number id;
    /**
     * 订单状态-1 待下单 0 待接单 101 待支付 102 待发货 103 已发货 7 已完成 8 已取消
     */
    public int state;
    public int selfSupportTag;
    /**
     * 配送费
     */
    public String deliveryCost;
    /**
     * 商品图片
     */
    public List<String> imgList;
    /**
     * 销售订单列表的采购商名称
     */
    public String ownedName;
    /**
     * 是否有合约信息
     */
    public boolean contract;
    /**
     * 合同状态（0：没有合同、1：拟定中、21：待采购商签署、22：待销售商签署、3：已完成、4：已过期、5：已作废）
     */
    public int contractStatus;
    /**
     * 下单审批状态（0：待审批，1：审批通过 ，2审批不通过 3 无审批 4 当前不在审批状态 但是配置有审批
     */
    public Integer placeProcessState;
    /**
     * 采购方式 1 直接采购 2合约采购
     */
    public int purchasingMethod;
    /**
     * 最新付款进度： -1 没有申请 一笔付款 0 有付款 待都没付款成功
     */
    public int payCount;
    /**
     * 销售订单该字段是发货 为0 表示一笔货没发， 采购是收货的 为-1 表示一笔货没发， 0 表示一笔货没收，但是供应商已发货，且采购商能查看
     */
    public int deliverCount;
    /**
     * 商品费用
     */
    public List<CommodityCost> commodityCosts;
    /**
     * 审批记录
     */
    public List<OrderProcess> orderProcess;
    /**
     * 货款方式（1：先款后货；2：先货后款）
     */
    public int paymentWay;

    // --------------------------自定义字段-------------------------------------
    /**
     * 订单类型。1：采购订单；2：销售订单。
     */
    public String orderDescribe = "";
    /**
     * 订单状态描述
     */
    public String orderStatusDesc = "";
    /**
     * 状态描述 注意，当此为空时，ui上的小点根据为空隐藏
     */
    public String statusInfoDesc = "";
    /**
     * 订单流程状态 1：待接单  2：待确认  3：履约中  4：已完成  5：已取消
     */
    public int orderProcessState;

    public OrderListEntity init(String orderDescribe) {
        this.orderDescribe = orderDescribe;
        initOrderInfo();
        return this;
    }

    /**
     * 采购订单与销售订单信息初始化
     */
    private void initOrderInfo() {
        if (-1 == state || 0 == state) {
            orderProcessState = 1;
            orderStatusDesc = "1".equals(orderDescribe) ? "等待供应商接单" : "待接单";

            // 在待接单里表示采购商下单审批与供应商接单审批
            if ("1".equals(orderDescribe) && placeProcessState != null) {
                if (placeProcessState == 0) {
                    // 采购订单采购商待接单下单审批中
                    statusInfoDesc = "下单审批中";
                } else if (placeProcessState == 1) {
                    // 采购商待接单下单审批通过
                    statusInfoDesc = "下单审批已通过";
                } else if (placeProcessState == 2) {
                    // 采购商待接单下单审批拒绝
                    statusInfoDesc = "下单审批已拒绝";
                } else if (placeProcessState == 3) {
                    statusInfoDesc = "";
                }
            } else if ("2".equals(orderDescribe) && processState != null) {
                // 销售订单 供应商待接单审批中
                if (processState == 0) {
                    statusInfoDesc = "接单审批中";
                } else if (processState == 1) {
                    statusInfoDesc = "接单审批已通过";
                } else if (processState == 2) {
                    statusInfoDesc = "接单审批已拒绝";
                } else if (processState == 3) {
                    statusInfoDesc = "";
                }
            }
        } else if (99 == state) {
            orderProcessState = 2;
            orderStatusDesc = 0 != contractStatus ? "合同洽谈中" : "1".equals(orderDescribe) ? "供应商已接单" : "等待采购商确认";

            // 在待确认里表示供应商接单显示与供应商接单审批
            if ("2".equals(orderDescribe) && processType != null && processState != null) {
                //供应商待接单审批中
                if (processType == 2 && processState == 1) {
                    statusInfoDesc = "接单审批已通过";
                }
            }

        } else if (101 == state || 102 == state || 103 == state) {
            orderProcessState = 3;
            orderStatusDesc = 2 != purchasingMethod ? "履约中" : "已签订合同";

            // 在履约中、已完成里表示收货与发货状态
            statusInfoDesc = getDeliveryDesc();

        } else if (7 == state) {
            orderProcessState = 4;
            orderStatusDesc = "已完成";

            // 在履约中、已完成里表示收货与发货状态
            statusInfoDesc = getDeliveryDesc();

        } else if (8 == state) {
            orderProcessState = 5;
            orderStatusDesc = "已取消";
            statusInfoDesc = "";
        }
    }

    /**
     * 获取发货描述
     */
    private String getDeliveryDesc() {
        if ("1".equals(orderDescribe)) {
            return -1 < deliverCount ? "已收货" + deliverCount + "单" : "已收货0单";
        } else if ("2".equals(orderDescribe)) {
            return 0 < deliverCount ? "已发货" + deliverCount + "单" : "已发货0单";
        }
        return "";
    }

    /**
     * 获取付款进度描述
     */
    public SpannableStringBuilder getPayProgressDesc() {
        return new SpanUtils()
                .append("付款进度：")
                .setForegroundColor(ColorUtils.getColor(R.color.goods_color_FF333333))
                .append(payCount >= 0 ? "已付" + payCount + "笔" : "已付0笔")
                .setForegroundColor(ColorUtils.getColor(R.color.goods_color_FF06C764))
                .create();
    }

    /**
     * 获取其他费用描述
     */
    public SpannableStringBuilder getPayOtherCostDesc() {
        SpannableStringBuilder builder = SpannableUtils.getMoneyStyle2("配送费  ", "¥", deliveryCost);
        if (null != handlingCost) {
            builder = builder.append(SpannableUtils.getMoneyStyle2("  装卸费  ", "¥", handlingCost));
        }
        if (null != installationCost) {
            builder = builder.append(SpannableUtils.getMoneyStyle2("  安装费  ", "¥", installationCost));
        }
        return builder;
    }

    /**
     * 取sku拼接字符串
     */
    public String getSkuString() {
        StringBuilder sb = new StringBuilder("");
        if (null != skuDetails) {
            for (SkuDetailsDTO skuDetailEntity : skuDetails) {
                sb.append(skuDetailEntity.name).append("：").append(skuDetailEntity.val).append("；");
            }
        }
        return sb.toString();
    }

    /**
     * 审批记录
     */
    public static class OrderProcess {
        /**
         * 创建日期
         */
        public String created;
        /**
         * 创建人
         */
        public String creator;
        /**
         * 删除状态  0 未删除 1 逻辑删除
         */
        public int deleted;
        /**
         * id
         */
        public long id;
        /**
         * 订单id
         */
        public long orderId;
        /**
         * 流程id
         */
        public String processId;
        /**
         * 审批状态
         */
        public int status;
        /**
         * 审批类型（1：采购下单，2：供应接单，3：订单支付）
         */
        public int type;
    }

    /**
     * 商品费用
     */
    public static class CommodityCost {

        /**
         * 分类ID
         */
        public String categoryId;
        /**
         * 客户端Id
         */
        public String clientId;
        /**
         * 创建日期
         */
        public String created;
        /**
         * 创建人
         */
        public String creator;
        /**
         * id
         */
        public String id;
        /**
         * 金额
         */
        public String money;
        /**
         * 订单id
         */
        public String orderId;
        /**
         * 0供应商配送 1供应商装卸
         */
        public String type;
        /**
         * 更新时间
         */
        public String updated;
        /**
         * 更新人
         */
        public String updater;
    }

    public static class SkuDetailsDTO implements Serializable {
        public String val;
        public String name;
    }
}
